\chapter{Tests unitaires}

\section{Cpp Unit}
	Pour réaliser nos tests unitaires nous avons utilisé le framework \emph{Cpp Unit}.
	\footnote{\url{http://sourceforge.net/apps/mediawiki/cppunit/index.php?title=Main_Page}}
	Il permet de créer simplement une suite de tests pour chaque élément à vérifier. Tous les tests unitaires sont cumulés et enrichis tout au long du développement.

\section{Description des tests réalisés}

\subsubsection{Extensions}
	Le test d'extension appelle quatre fois la fonction \emph{assembleDna} avec des entrées différentes. Il vérifie le code de retour de la fonction, l'état des flags, la longueur de la chaîne construite, et le contenu de la liste de nucléotides.

\subsubsection{Histogramme}
	Pour ce test une liste de 1500 séquences d'Adn est générée. Puis les champs contenant les longueurs des chaînes sont modifiés : les 100 premiers sont de longueur 5, les 100 suivant de longueur 10 et ainsi de suite.
	Un histogramme est ensuite construit avec cette liste, celui-ci stocke dans une \emph{map} le nombre de séquences d'Adn par longueur de chaîne de nucléotides.Enfin, il est vérifié que la \emph{map} générée contient bien les quantités attendues.
	
	Les méthodes de comparaison d'égalité et d'affectation sont également testées. Pour cela, trois histogrammes identiques H, I et J sont générés et on teste que H $==$ I renvoie vrai. Puis, J est légèrement modifié et on teste que  H $==$ J renvoie faux. Enfin, on réaffecte I à J, et on teste que l'égalité est vraie.

\subsubsection{Tri et dédoublonnage d'une liste de séquences Adn}
	La liste étant triée par ordre alphabétique, le test consiste à la parcourir et à vérifier que chaque élément est inférieur et différent de l'élément précédent.

\subsubsection{Randomisation}
	Le test de randomisation génère 100 fois 10000 nombres compris entre 0 et 3, selon une distribution discrète.
	Pour chaque valeur entre 0 et 3, les fréquences sont calculées et comparées au taux indiqués dans la distribution pour calculer l'erreur.
	Le long des 100 répétitions, les erreurs sont accumulées afin de calculer une erreur moyenne.
	Enfin, il est vérifié que cette erreur moyenne ne dépasse pas un certain seuil de tolérance.
	Celui-ci a été fixé à 1 point.


\subsubsection{Compte des nucléotides}
	La fonction qui compte les nucléotides a été testée de la manière suivante : génération d'une liste suivant certaines proportions, compte des nuclétides effectivement présent dans la liste générée, calcul des poucentages et vérification que les pourcentages obtenus correspondent bien aux proportions souhaitées.

\subsubsection{Conversion espace de couleur vers nucléotides}
	Un test de conversion d'une séquence de couleur en une séquence de nucléotides est réalisé avec une séquence de référence décodée manuellement.

	Tous les cas de rejet d'une conversion sont testés. Ceci inclus:
	\begin{itemize}
		\item Séquence contenant un "." au lieu d'un code couleur.
		\item Préfixe de séquence autre que la letre "T".
		\item Longueur de conversion requise plus grande que le nombre de couleurs dans la séquence à convertir.
	\end{itemize}

\subsubsection{Listes}
	Test de la fusion de deux listes, avec vérification de la remise à zero de tous les flags, de la longueur de la liste fusionnée résultante et de sa composition exacte.

	Test de la remise à zéro de tous les champs d'une liste lors de son vidage.

\subsubsection{Manipulation des nucléotides}
	Plusieurs tests vérifient la conversion d'un nucléotide de son format alphabétique vers sa forme compacte de stockage codée sur 2 bits et vice versa. La génération d'exceptions pour ces conversions est également testée.

	Toutes les macros d'accès aux nucléotides dans leur structure de stockage compacte (tableau de \emph{char}) sont testées.

	Il y a également un test pour une fonction de conversion d'une séquence courte de nucléotide sous forme compacte en une chaine de caractères. L'exactitude de la chaine de caractères résultante est vérifiée.


